
using System;
using System.Text;
using NuevoGenNHibernate.CEN.Ebay;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Criterion;
using NHibernate.Exceptions;
using NuevoGenNHibernate.EN.Ebay;
using NuevoGenNHibernate.Exceptions;

namespace NuevoGenNHibernate.CAD.Ebay
{
public partial class SubastaCAD : BasicCAD, ISubastaCAD
{
public SubastaCAD() : base ()
{
}

public SubastaCAD(ISession sessionAux) : base (sessionAux)
{
}



public SubastaEN ReadOIDDefault (int id_venta)
{
        SubastaEN subastaEN = null;

        try
        {
                SessionInitializeTransaction ();
                subastaEN = (SubastaEN)session.Get (typeof(SubastaEN), id_venta);
                SessionCommit ();
        }

        catch (Exception ex) {
                SessionRollBack ();
                if (ex is NuevoGenNHibernate.Exceptions.ModelException)
                        throw ex;
                throw new NuevoGenNHibernate.Exceptions.DataLayerException ("Error in SubastaCAD.", ex);
        }


        finally
        {
                SessionClose ();
        }

        return subastaEN;
}


public int CrearSubasta (SubastaEN subasta)
{
        try
        {
                SessionInitializeTransaction ();
                if (subasta.Vendedor != null) {
                        subasta.Vendedor = (NuevoGenNHibernate.EN.Ebay.UsuarioEN)session.Load (typeof(NuevoGenNHibernate.EN.Ebay.UsuarioEN), subasta.Vendedor.Nick);

                        subasta.Vendedor.Ventas.Add (subasta);
                }
                if (subasta.Usuario != null) {
                        subasta.Usuario = (NuevoGenNHibernate.EN.Ebay.UsuarioEN)session.Load (typeof(NuevoGenNHibernate.EN.Ebay.UsuarioEN), subasta.Usuario.Nick);

                        subasta.Usuario.ListaSeguimiento.Add (subasta);
                }
                if (subasta.LineaVenta != null) {
                        foreach (NuevoGenNHibernate.EN.Ebay.LineaVentaEN item in subasta.LineaVenta) {
                                item.CompraloYA = subasta;
                                session.Save (item);
                        }
                }

                session.Save (subasta);
                SessionCommit ();
        }

        catch (Exception ex) {
                SessionRollBack ();
                if (ex is NuevoGenNHibernate.Exceptions.ModelException)
                        throw ex;
                throw new NuevoGenNHibernate.Exceptions.DataLayerException ("Error in SubastaCAD.", ex);
        }


        finally
        {
                SessionClose ();
        }

        return subasta.Id_venta;
}

public void ModificarSubasta (SubastaEN subasta)
{
        try
        {
                SessionInitializeTransaction ();
                SubastaEN subastaEN = (SubastaEN)session.Load (typeof(SubastaEN), subasta.Id_venta);

                subastaEN.Finalizado = subasta.Finalizado;


                subastaEN.FormaDePago = subasta.FormaDePago;


                subastaEN.Fecha = subasta.Fecha;


                subastaEN.Nombre = subasta.Nombre;


                subastaEN.Descripcion = subasta.Descripcion;


                subastaEN.PrecioFinal = subasta.PrecioFinal;


                subastaEN.GastosEnvio = subasta.GastosEnvio;


                subastaEN.FechaFin = subasta.FechaFin;


                subastaEN.MinimoPuja = subasta.MinimoPuja;


                subastaEN.TotalPujas = subasta.TotalPujas;

                session.Update (subastaEN);
                SessionCommit ();
        }

        catch (Exception ex) {
                SessionRollBack ();
                if (ex is NuevoGenNHibernate.Exceptions.ModelException)
                        throw ex;
                throw new NuevoGenNHibernate.Exceptions.DataLayerException ("Error in SubastaCAD.", ex);
        }


        finally
        {
                SessionClose ();
        }
}
public void EliminarSubasta (int id_venta)
{
        try
        {
                SessionInitializeTransaction ();
                SubastaEN subastaEN = (SubastaEN)session.Load (typeof(SubastaEN), id_venta);
                session.Delete (subastaEN);
                SessionCommit ();
        }

        catch (Exception ex) {
                SessionRollBack ();
                if (ex is NuevoGenNHibernate.Exceptions.ModelException)
                        throw ex;
                throw new NuevoGenNHibernate.Exceptions.DataLayerException ("Error in SubastaCAD.", ex);
        }


        finally
        {
                SessionClose ();
        }
}

public SubastaEN ReadOID (int id_venta)
{
        SubastaEN subastaEN = null;

        try
        {
                SessionInitializeTransaction ();
                subastaEN = (SubastaEN)session.Get (typeof(SubastaEN), id_venta);
                SessionCommit ();
        }

        catch (Exception ex) {
                SessionRollBack ();
                if (ex is NuevoGenNHibernate.Exceptions.ModelException)
                        throw ex;
                throw new NuevoGenNHibernate.Exceptions.DataLayerException ("Error in SubastaCAD.", ex);
        }


        finally
        {
                SessionClose ();
        }

        return subastaEN;
}

public System.Collections.Generic.IList<SubastaEN> ReadAll (int first, int size)
{
        System.Collections.Generic.IList<SubastaEN> result = null;
        try
        {
                SessionInitializeTransaction ();
                if (size > 0)
                        result = session.CreateCriteria (typeof(SubastaEN)).
                                 SetFirstResult (first).SetMaxResults (size).List<SubastaEN>();
                else
                        result = session.CreateCriteria (typeof(SubastaEN)).List<SubastaEN>();
                SessionCommit ();
        }

        catch (Exception ex) {
                SessionRollBack ();
                if (ex is NuevoGenNHibernate.Exceptions.ModelException)
                        throw ex;
                throw new NuevoGenNHibernate.Exceptions.DataLayerException ("Error in SubastaCAD.", ex);
        }


        finally
        {
                SessionClose ();
        }

        return result;
}
}
}
